/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cliente;


import java.util.ArrayList;
import javax.swing.JLabel;

/**
 * Manejador del repositorio de archivos del cliente
 * 
 * @author Carlos
 */
public class ClienteManejadorArchivos {
    
    private String Usuario;
    private String Pass;
    private ArrayList<Thread> Hilos;
    private static ClienteManejadorArchivos instancia;
    private ArrayList<String> ListaServidores = new ArrayList<String>();
    
	/**
     * Constructor de la clase personalizado
     * 
     * @param esteUsuario usuario que tiene los datos en el repositorio
     * @param estePass password del usuario
     */
    private ClienteManejadorArchivos(String esteUsuario,String estePass){
                this.Usuario = esteUsuario;
                this.Pass = estePass;
                this.Hilos = new ArrayList<Thread>();            
    }
    
    /**
     * Agregamos servidor a la conexion
     * @param valor  el valor del servidor
     */
    public void agregarServidor(String valor){
        ListaServidores.add(valor);
    }
    
    /**
     * Obtenemos el IP del servidor
     * 
     * @param pos la posicion en el arreglo de servidores
     * @return el servidor en la posición de iteración
     */
    public String getServerIp(int pos){
        try{
            return this.ListaServidores.get(pos);
        }catch (Exception e){
            return "No existe";
        }
    }
    
	/**
     * Instancia de la clase ClienteManejadorArchivos (singleton)
     * 
     * @param usuarioActual el usuario logueado actualmente
     * @param passActual el password del usuario actual
     * @return instancia de la clase
     */
    public static ClienteManejadorArchivos getInstance(String usuarioActual,String passActual){
        if (ClienteManejadorArchivos.instancia == null){
            ClienteManejadorArchivos.instancia = new ClienteManejadorArchivos(usuarioActual,passActual);
        }else{
            instancia.Usuario = usuarioActual;
            instancia.Pass = passActual;
        } 
        return ClienteManejadorArchivos.instancia;
     }
    
	/**
     * Sube archivos al servidor
     * 
     * @param barraEstado etiqueta que muestra el estado de la subida
     * @param pathArchivo ruta del archivo
     * @param serverIp IP del servidor
     * @param nombreArchivo nombre del archivo
     */
    public void subirArchivo(JLabel barraEstado,String pathArchivo,String serverIp,String nombreArchivo){
        this.Hilos.add(new SubidaArchivoThread(this.Usuario,this.Pass,serverIp,barraEstado,pathArchivo,nombreArchivo));
        this.Hilos.get(this.Hilos.size()-1).start();
        System.out.println("Se abrio el nuevo socket");
    }
    
	/**
     * Descarga archivos del servidor
     * 
     * @param serverIp IP del servidor
     * @param nombreArchivo nombre del archivo
     */
    public void descargarArchivo(JLabel barraEstado,String serverIp,String nombreArchivo){
        this.Hilos.add(new DescargaArchivoThread(this.Usuario,this.Pass,serverIp,barraEstado,nombreArchivo));
        this.Hilos.get(this.Hilos.size()-1).start();
        System.out.println("Se abrio el nuevo socket");
    }
    
}

